#pragma once

#include <memory>
#include <vector>


namespace evm { namespace messaging {

using namespace std;

struct BaseIncomingMsg;
using IncomingMsgPtr = shared_ptr<BaseIncomingMsg>;

struct BaseListener;
using ListenerPtr = shared_ptr<BaseListener>;

struct Target;
using TargetPtr = shared_ptr<Target>;
using TargetPriority = pair<TargetPtr, string>;

struct Filter;
using FilterPtr = shared_ptr<Filter>;

struct Endpoint;
using EndpointPtr = shared_ptr<Endpoint>;
using Endpoints = vector<EndpointPtr>;

struct Transport;
using TransportPtr = shared_ptr<Transport>;

struct BaseDriver;
using DriverPtr = shared_ptr<BaseDriver>;

struct BaseDispatcher;
using DispatcherPtr = shared_ptr<BaseDispatcher>;

}}
